/*
 * Copyright (c) 2020.5，华乘电气科技有限公司
 * All rights reserved.
 *
 * 文件名称：aepulsespectrum.h
 * 
 * 初始版本：1.0
 * 作者：洪澄
 * 创建日期：2020/06/03
 * 摘要：AE脉冲图谱
 * 当前版本：1.0
 */

#pragma once

#include "spectrum.h"
#include "aespectrumdefine.h"

namespace DataSpecificationGW
{
    class AEPulseSpectrumPrivate;
    class DATASPECIFICATIONSHARED_EXPORT AEPulseSpectrum : public Spectrum
    {
    public:
        AEPulseSpectrum();
        ~AEPulseSpectrum();

        /************************************************
         * 函数名   : setDataSpecificationVersion
         * 输入参数 :
           const DataSpecificationVersion eDataSpecificationVersion: 数据规范版本号
         * 输出参数 : NULL
         * 返回值   : void
         * 功能     : 设置数据规范版本号
         ************************************************/
        virtual void setDataSpecificationVersion(const DataSpecificationVersion eDataSpecificationVersion);

        /************************************************
         * 函数名   : spectrumName
         * 输入参数 : NULL
         * 输出参数 : NULL
         * 返回值   : QString
         * 功能     : 图谱名称
         ************************************************/
        virtual QString spectrumName() const;

        /************************************************
         * 函数名   : setAEPulseExtInformation
         * 输入参数 :
           const AEPulseExtInformation& stAEPulseExtInformation: AE相位ExtInformation
         * 输出参数 : NULL
         * 返回值   : void
         * 功能     : 设置AE相位ExtInformation
         ************************************************/
        void setAEPulseExtInformation(const AEPulseExtInformation& stAEPulseExtInformation);

        /************************************************
         * 函数名   : setAEPulseData
         * 输入参数 :
           const AEPulseData& stAEPulseData: AE相位Data
         * 输出参数 : NULL
         * 返回值   : void
         * 功能     : 设置AE相位Data
         ************************************************/
        void setAEPulseData(const AEPulseData& stAEPulseData);

        /************************************************
         * 函数名   : getAEPulseExtInformation
         * 输入参数 : NULL
         * 输出参数 :
           AEPulseExtInformation& stAEPulseExtInformation: AE相位ExtInformation
         * 返回值   : void
         * 功能     : 获取AE相位ExtInformation
         ************************************************/
        void getAEPulseExtInformation(AEPulseExtInformation& stAEPulseExtInformation);

        /************************************************
         * 函数名   : setAEPulseData
         * 输入参数 : NULL
         * 输出参数 :
           AEPulseData& stAEPulseData: AE相位Data
         * 返回值   : void
         * 功能     : 获取AE相位Data
         ************************************************/
        void getAEPulseData(AEPulseData& stAEPulseData);

    protected:

        /************************************************
         * 函数名   : saveBinarySpectrumExtInfo
         * 输入参数 :
           QDataStream& out: 输出流
         * 输出参数 : NULL
         * 返回值   : bool
         * 功能     : 保存二进制可扩展信息段
         ************************************************/
        virtual bool saveBinarySpectrumExtInfo(QDataStream& out);

        /************************************************
         * 函数名   : saveXMLSpectrumExtInfo
         * 输入参数 :
           XMLDocument& xmlDocumentObj: xml文档对象
           QDomElement& element: dom元素
         * 输出参数 : NULL
         * 返回值   : bool
         * 功能     : 保存XML可扩展信息段
         ************************************************/
        virtual bool saveXMLSpectrumExtInfo(XMLDocument& xmlDocumentObj, QDomElement& element);

        /************************************************
         * 函数名   : saveJSONSpectrumExtInfo
         * 输入参数 :
           rapidjson::Document::AllocatorType& alloc:
           rapidjson::Value& jsonValue: json数据
         * 输出参数 : NULL
         * 返回值   : bool
         * 功能     : 保存JSON可扩展信息段
         ************************************************/
        virtual bool saveJSONSpectrumExtInfo(rapidjson::Document::AllocatorType& alloc, rapidjson::Value& jsonValue);

        /************************************************
         * 函数名   : saveBinarySpectrumData
         * 输入参数 :
           QDataStream& out: 输出流
         * 输出参数 : NULL
         * 返回值   : bool
         * 功能     : 保存二进制图谱数据段
         ************************************************/
        virtual bool saveBinarySpectrumData(QDataStream& out);

        /************************************************
         * 函数名   : saveXMLSpectrumData
         * 输入参数 :
           XMLDocument& xmlDocumentObj: xml文档对象
           QDomElement& element: dom元素
         * 输出参数 : NULL
         * 返回值   : bool
         * 功能     : 保存XML图谱数据段
         ************************************************/
        virtual bool saveXMLSpectrumData(XMLDocument& xmlDocumentObj, QDomElement& element);

        /************************************************
         * 函数名   : saveJSONSpectrumData
         * 输入参数 :
           rapidjson::Document::AllocatorType& alloc:
           rapidjson::Value& jsonValue: json数据
         * 输出参数 : NULL
         * 返回值   : bool
         * 功能     : 保存JSON图谱数据段
         ************************************************/
        virtual bool saveJSONSpectrumData(rapidjson::Document::AllocatorType& alloc, rapidjson::Value& jsonValue);

        /************************************************
         * 函数名   : parseBinarySpectrumExtInfo
         * 输入参数 :
           QDataStream& in: 输入流
         * 输出参数 : NULL
         * 返回值   : bool
         * 功能     : 解析二进制可扩展信息段
         ************************************************/
        virtual bool parseBinarySpectrumExtInfo(QDataStream& in);

        /************************************************
         * 函数名   : parseXMLSpectrumExtInfo
         * 输入参数 :
           XMLDocument& xmlDocumentObj: xml文档对象
         * 输出参数 : NULL
         * 返回值   : bool
         * 功能     : 解析XML可扩展信息段
         ************************************************/
        virtual bool parseXMLSpectrumExtInfo(XMLDocument& xmlDocumentObj);

        /************************************************
         * 函数名   : parseJSONSpectrumExtInfo
         * 输入参数 :
           const rapidjson::Value& jsonValue: json数据
         * 输出参数 : NULL
         * 返回值   : bool
         * 功能     : 解析JSON可扩展信息段
         ************************************************/
        virtual bool parseJSONSpectrumExtInfo(const rapidjson::Value& jsonValue);

        /************************************************
         * 函数名   : parseBinarySpectrumData
         * 输入参数 :
           QDataStream& in: 输入流
         * 输出参数 : NULL
         * 返回值   : bool
         * 功能     : 解析二进制图谱数据段
         ************************************************/
        virtual bool parseBinarySpectrumData(QDataStream& in);

        /************************************************
         * 函数名   : parseXMLSpectrumData
         * 输入参数 :
           XMLDocument& xmlDocumentObj: xml文档对象
         * 输出参数 : NULL
         * 返回值   : bool
         * 功能     : 解析XML图谱数据段
         ************************************************/
        virtual bool parseXMLSpectrumData(XMLDocument& xmlDocumentObj);

        /************************************************
         * 函数名   : parseJSONSpectrumData
         * 输入参数 :
           const rapidjson::Value& jsonValue: json数据
         * 输出参数 : NULL
         * 返回值   : bool
         * 功能     : 解析JSON图谱数据段
         ************************************************/
        virtual bool parseJSONSpectrumData(const rapidjson::Value& jsonValue);

    private:
        AEPulseSpectrumPrivate* m_pAEPulseSpectrumPrivate{ Q_NULLPTR };
    };
}
